package com.ccp.dev.system.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.system.model.GlobalType;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * GlobalType Dao对象
 *
 * @author caishaofan
 */
public interface GlobalTypeDao extends IBaseMapper<GlobalType, String> {

    /**
     * 根据catkey，tenantId获取数据。
     *
     * @param catKey   分类key
     * @param tenantId 租户id
     * @param treeType 树类型
     * @return 返回分类集合
     */
    List<GlobalType> getByCatKey(@Param("catKey") String catKey, @Param("tenantId") String tenantId, @Param("treeType") String treeType);
    /**
     * 根据catkey，tenantId获取数据。
     *
     * @param queryFilter 查询条件
     * @return List<GlobalType>
     */
    List<GlobalType> getByCatKeyQueryFilter(QueryFilter queryFilter);
    /**
     * 对象功能：判断是否存在该接节点key的记录
     *
     * @param catKey  分类key
     * @param nodeKey 节点的分类
     * @return 返回是否存在该接节点key的记录
     */
    int isNodeKeyExists(@Param("catKey") String catKey, @Param("nodeKey") String nodeKey);

    /**
     * 对象功能：判断是否存在该接节点名称记录
     *
     * @param catKey   分类key
     * @param nodeName 节点名称
     * @return 返回是否存在该接节点名称记录
     */
    int isNodeNameExists(@Param("catKey") String catKey, @Param("nodeName") String nodeName);

    /**
     * 对象功能：修改判断该节点key名称是否重复
     *
     * @param typeId  id
     * @param catKey  分类key
     * @param nodeKey 节点key
     * @return 返回该节点key名称是否重复
     */
    int isNodeKeyExistsForUpdate(@Param("typeId") String typeId, @Param("catKey") String catKey, @Param("nodeKey") String nodeKey);

    /**
     * 查找某个节点的子节点集合
     *
     * @param typeId 节点id
     * @return 分类集合
     */
    List<GlobalType> getGlobalTypeByParentId(String typeId);

    /**
     * 根据路径取子结点
     *
     * @param nodePath 路径
     * @return 返回根据路径取子结点的结果数据
     */
    List<GlobalType> getByNodePath(String nodePath);

    /**
     * 根据nodekey获取字典的分类类型
     * @param nodeKey 分类表的nodekey
     * @return 返回根据nodekey获取字典的分类类型
     */
    GlobalType getByDictNodeKey(String nodeKey);

    /**
     * 根据tenantId获取流程的分类类型
     * @param tenantId
     * @return 返回根据tenantId获取流程的分类类型
     */
    List<GlobalType> getByTenantIdAndActRights(@Param("tenantId") String tenantId,@Param("actRights") String actRights);
    /**
     * 取得个人的分类类型。
     * @param catKey	分类ID
     * @param userId	用户ID
     * @return 返回取得个人的分类类型的数据信息
     */
    @SuppressWarnings("unchecked")
    List<GlobalType> queryPersonType(@Param("catKey")String catKey, @Param("userId")String userId, @Param("tenantId")String tenantId);
}

